/* 
1 页面被打开的时候 onShow 
  0 onShow 不同于onLoad 无法在形参上接收 options参数  需要在页面栈获取 也就打开一个页面就push到一个数组里面 最大的索引就当前页面 getCurrentPages 方法获取
  0.5 判断缓存中有没有token 
    1 没有 直接跳转到授权页面
    2 有 直接往下进行 
  1 获取url上的参数type
  2 根据type来决定页面标题的数组元素 哪个被激活选中 
   type=1 index=0 存在这个映射关系
  2 根据type 去发送请求获取订单数据
  3 渲染页面
2 点击不同的标题 重新发送请求来获取和渲染数据 
 */
import { request } from "../../request/index.js";
import regeneratorRuntime from '../../lib/runtime/runtime';

Page({
  data: {
    //订单数据
    orders: [],
    // tabs数据
    tabs: [
      {
        id: 0,
        value: "全部",
        isActive: true
      },
      {
        id: 1,
        value: "待付款",
        isActive: false
      },
      {
        id: 2,
        value: "待发货",
        isActive: false
      },
      {
        id: 3,
        value: "退款/退货",
        isActive: false
      }
    ]
  },
  onShow(options) {
    //先判断token是否存在 存在在设置 封装好的的请求头信息是从缓存中获取的
    const token = wx.getStorageSync('token')
    // if (!token) {
    //   //不存在就跳转到授权页面 阻止程序往下执行
    //   wx.navigateTo({
    //     url: '/pages/auth/index'
    //   })
    //   return;
    // }
    // 1 获取当前的小程序的页面栈-数组 长度最大是10页面 
    let pages = getCurrentPages()
    // 2 数组中 索引最大的页面就是当前页面
    let currentPage = pages[pages.length - 1].options
    // console.log(currentPage); //{type: "1"}
    // 3 获取url上的type参数
    // const { type } = currentPage.options;
    const type = currentPage.type;
    // 4 激活选中页面标题 当 type=1 index=0  打开新的页面的时候也要进行 待发货这些
    this.changeTitleByIndex(type - 1);
    //调用获取订单接口
    this.getOrders(type);
  },
  // 根据标题索引来激活选中 标题数组
  changeTitleByIndex(index) { //核心的代码还是没变 根据index来判断 是否添加
    // 2 修改源数组 遍历实现索引相等就添加样式 
    let { tabs } = this.data
    tabs.forEach((v, i) => { i === index ? v.isActive = true : v.isActive = false })
    // 3 赋值到data中
    this.setData({
      tabs
    })
  },
  //根据索引不同来实现激活选项 但是需要改造一下 根据不同的type来切换 因为从用户中心点击的待发货这些并没有激活
  handleTabsItemChange(e) {
    // 1 获取被点击的标题索引
    const { index } = e.detail;
    this.changeTitleByIndex(index);
    // 2点击不同的tabs栏就 重新发送请求 type=1 index=0 存在这个映射关系
    this.getOrders(index + 1); //根据tyep不同获取不同的数据
  },
  //获取订单数据接口
  async getOrders(type) {
    //token无效 因为要添加白名单之后 就好 所以获取到的null
    const res = await request({ url: "/my/orders/all", data: { type } }); //返回订单数组
    // 赋值操作 无线token 无法获值的
    this.setData({
      //...v展示数组每一项 之后新增一个属性 值就是简单处理的时间戳 秒变毫秒 
      //toLocaleString() 方法可根据本地时间把 Date 对象转换为字符串，并返回结果
      // orders: res.orders.map(v=>({...v,create_time_cn:(new Date(v.create_time*1000).toLocaleString())}))
    })
  }
})